package service

import (
	"errors"
	"fmt"
	"gorm.io/gorm"
	"server/client/db"
	"server/model"
)

func FindRoleById(roleId string) (err error, user *model.SysRole) {
	var u model.SysRole
	if err = db.DB.Where("`role_id` = ?", roleId).First(&u).Error; err != nil {
		return errors.New("角色不存在"), &u
	}
	return nil, &u
}

func GetRoleInfo(roleId string) (err error, user *model.SysRole) {
	var u model.SysRole
	if err = db.DB.Where("`role_id` = ?", roleId).First(&u).Error; err != nil {
		fmt.Println(err)
		return errors.New("角色不存在"), &u
	}

	var casbin []model.CasbinModel
	if err = db.DB.Where("`v0` = ?", roleId).Table("casbin_rule").Find(&casbin).Error; err != nil {
		fmt.Println(err)
		return errors.New("查询权限失败"), &u
	}
	u.CasbinModels = casbin
	return nil, &u
}

func CreateRole(u model.SysRole) (err error, roleInter *model.SysRole) {
	var role model.SysRole
	if !errors.Is(db.DB.Where("role_id = ?", u.RoleId).First(&role).Error, gorm.ErrRecordNotFound) { // 判断角色是否注册
		return errors.New("角色已注册"), roleInter
	}

	if err := db.DB.Create(&u).Error; err != nil {
		return err, nil
	}
	return nil, &u

}

func DeleteRole(roleId string) error {
	if !errors.Is(db.DB.Where("role_id = ?", roleId).First(&model.SysUser{}).Error, gorm.ErrRecordNotFound) {
		return errors.New("此角色有用户正在使用禁止删除")
	}

	var role model.SysRole
	err := db.DB.Where("role_id = ?", roleId).Delete(&role).Error
	ClearCasbin(0, roleId)
	return err

}
